// 导入 koa 框架
const koa = require('koa')
const fs = require('fs')
const path =  require('path')
const http = require('http')
const http2 = require('http2')
// 托管静态资源的中间件
const serve = require('koa-static')
// 压缩资源的中间件
const compress = require('koa-compress')


// 读取SSL证书，
// 注意，此处的 .key 和 .pem 文件路径不存在，需要自己去 freessl.org 官网申请自己的证书
const options = {
  key: fs.readFileSync(path.join(__dirname, './cert/private.key')),
  cert: fs.readFileSync(path.join(__dirname, './cert/full_chain.pem'))
}


// 创建koa服务器
const app = new koa()


// 自定义中间件，如果用户访问的是http协议，则重定向到https协议
app.use(async (ctx, next) => {
  // ctx.secure 判断是否为安全的https协议，值为 true 或 false
  if (ctx.secure) {
    // 如果是安全的协议，则直接运行后续的中间件
    await next()
  } else {
    // 否则，先重定向到安全的协议
    ctx.redirect(`https://${ctx.host}${ctx.url}`)
    // 再运行后续的中间件
    await next()
  }
})


// 压缩资源
app.use(compress())

// 托管静态资源
app.use(serve(path.join(__dirname, './dist')))


// 创建普通的http服务器，
// http协议的默认端口是80
http.createServer(app.callback()).listen(80, () => {
  console.log('http server running at 80')
})

// 创建http2服务器，
// https协议的默认端口是443
http2.createSecureServer(options, app.callback()).listen(443, () => {
  console.log('http2 server running at 443')
})
